﻿#pragma once

#include "../common/mengyu_def.h"
#include <vector>
#include <string>
#include <ctime>

//#define MENG_YU_LOG

#ifdef MENG_YU_LOG
#define IPC_LOG(message) IpcClient::SendLog(std::move(message))
#define IPC_LOG_ERROR(message) IpcClient::SendLog(std::move(message))
#else
#define IPC_LOG(message) 
#define IPC_LOG_ERROR(message)
#endif


class IpcClient {
public:
    IpcClient();
    ~IpcClient();
    static bool Init(IpcClient *instance);
    static void Release();
    
    static bool GetCandidates(const wchar_t *input, int input_size, std::vector<std::wstring> &out_put); // 静态方法，用于获取候选词
    static bool SendLog(const std::wstring&& wmessage); // 静态方法，用于发送日志消息
    static bool OpenUI(); //打开ui界面
    static bool IsReady();
private:
    // 连接到管道服务器（同步）
    bool connect();
    // 断开连接
    void disconnect();
    // 同步获取候选词（输入法核心方法）
    bool getCandidates(const wchar_t *input, int input_size,std::vector<std::wstring> &out_put);
    // 发送日志消息（同步）
    bool sendLog(const std::wstring&& wmessage);  
    // 打开ui界面
    bool openUI();  

    bool sendBuffer(const void *data,int len,DWORD *written);

    void startServer();

private:
    HANDLE _hPipe; // 管道句柄
    static IpcClient* g_IpcClient;
    char _buffer[MENGYU_PIPE_SIZE];
    time_t _last_connect_time;
};